package br.com.esrestaurante.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.esrestaurante.entidades.Usuario;
import br.com.esrestaurante.tipos.TipoPerfilUsuario;
import br.com.esrestaurante.util.HibernateUtil;

public class UsuarioDAO {

	Session session;

	public UsuarioDAO() {
		this.session = HibernateUtil.getInstance().getSessionFactory()
				.getCurrentSession();
	}

	public void salva(Usuario usuario) {
		session.save(usuario);
	}
	
	public void merge(Usuario usuario) {
		session.merge(usuario);
	}

	public Usuario getUsuario(int id) {
		return (Usuario) session.load(Usuario.class, id);
	}

	public void update(Usuario usuario) {
		session.update(usuario);
	}

	public void delete(Usuario usuario) {
		session.delete(usuario);
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> listarEmpregados() {
		
		Criteria c = session.createCriteria(Usuario.class);		
		c.add(Restrictions.ne("perfil", TipoPerfilUsuario.CLIENTE));
		
		return c.list();
	}

	@SuppressWarnings("unchecked")
	public List<Usuario> listarClientes() {
		
		Criteria c = session.createCriteria(Usuario.class);		
		c.add(Restrictions.eq("perfil", TipoPerfilUsuario.CLIENTE));
		
		return c.list();
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> listarTodos() {
		
		Criteria c = session.createCriteria(Usuario.class);
		
		return c.list();
	}

	public Usuario getUsuario(String login, String senha) {
		Criteria c = session.createCriteria(Usuario.class);
		c.add(Restrictions.eq("login", login));
		c.add(Restrictions.eq("senha", senha));

		return (Usuario) c.uniqueResult();
	}
	
	public boolean verificaLoginExistente(String login) {
		Criteria c = session.createCriteria(Usuario.class);
		c.add(Restrictions.eq("login", login));

		Usuario usuario = (Usuario) c.uniqueResult();
		
		return usuario != null;
	}
}
